package com.own.component.util.excel.util.read.method;

import com.own.component.util.excel.util.read.base.BaseExcelReadConfig;
import org.apache.poi.ss.usermodel.Sheet;

import java.util.List;

/**
 * SheetMethod
 *
 * @author chenxueli
 * @date 2022-10-14 11:47:00
 */
public class SheetMethod {

    /**
     * 获取值信息
     *
     * @param sheet  sheet信息
     * @param rowNum 行号
     * @param colNum 列号
     * @return 值信息
     */
    public static String getValue(Sheet sheet, int rowNum, int colNum) {
        return getValue(sheet, rowNum, colNum, null);
    }

    /**
     * 获取值信息
     *
     * @param sheet    sheet信息
     * @param rowNum   行号
     * @param colNum   列号
     * @param config   配置信息
     * @param <T>      泛型
     * @param <CONFIG> 配置信息泛型
     * @return 值信息
     */
    public static <T, CONFIG extends BaseExcelReadConfig<T>> String getValue(Sheet sheet, int rowNum, int colNum, CONFIG config) {
        // 获取行信息
        var row = sheet.getRow(rowNum);
        if (row == null) {
            return "";
        }
        // 获取列信息
        var cell = row.getCell(colNum);
        // 获取值
        return CellMethod.getValue(cell, config);
    }

    /**
     * 获取sheet某一行的值
     *
     * @param sheet sheet信息
     * @param num   行信息
     * @return 值列表
     */
    public static List<String> listRowValue(Sheet sheet, int num) {
        return RowMethod.listRowValue(sheet.getRow(num));
    }

    /**
     * 获取sheet某一行的值
     *
     * @param sheet    sheet信息
     * @param num      行信息
     * @param config   配置信息
     * @param <T>      泛型
     * @param <CONFIG> 配置信息泛型
     * @return 值列表
     */
    public static <T, CONFIG extends BaseExcelReadConfig<T>> List<String> listRowValue(Sheet sheet, int num, CONFIG config) {
        return RowMethod.listRowValue(sheet.getRow(num), config);
    }

    /**
     * 获取sheet某一行的值
     *
     * @param sheet sheet信息
     * @param num   行信息
     * @return 值列表
     */
    public static List<String> listRowComment(Sheet sheet, int num) {
        return RowMethod.listRowComment(sheet.getRow(num));
    }

    /**
     * 获取sheet某一行的值
     *
     * @param sheet    sheet信息
     * @param num      行信息
     * @param config   配置信息
     * @param <T>      泛型
     * @param <CONFIG> 配置信息泛型
     * @return 值列表
     */
    public static <T, CONFIG extends BaseExcelReadConfig<T>> List<String> listRowComment(Sheet sheet, int num, CONFIG config) {
        return RowMethod.listRowComment(sheet.getRow(num), config);
    }

}
